home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / mc51bugs.zip / Q29850 < prev    next >
Text File  |  1988-07-21  |  1KB  |  51 lines

  1. Q29850 Bad Code Generation with Call to Function
  2. C Compiler
  3. 5.00 5.10
  4. MS-DOS
  5.  
  6. Problem:
  7.    The compiler generates incorrect code for a call to the function
  8. strcpy() in the following program when it is compiled in small or
  9. medium model. When the compiler makes the following call:
  10.  
  11. strcpy(macronames[nrmacros],line);
  12.  
  13. the generated code pushes macrobuffer+totalmac instead of pushing
  14. macronames[nrmacros]. The example follows:
  15.  
  16. #include <stdio.h>
  17. #include <string.h>
  18.  
  19. int nrmacros=0;
  20. char macrobuffer[800],*macronames[10];
  21. int l;
  22. void openfiles()
  23. {
  24. char line[128];
  25. int totalmac;
  26. char *macropointer =macrobuffer;
  27. macropointer=macrobuffer+totalmac;
  28. macronames[nrmacros]=macropointer;
  29. totalmac += l-1;
  30. if(totalmac<=800)
  31. strcpy(macronames[nrmacros],line);
  32. }
  33.  
  34. Response:
  35.    The code that is generated is seeing the following:
  36.  
  37.    macronames[nrmacros] = macropointer=macrobuffer+totalmac;
  38.  
  39.    However, by the time the call to strcpy() is made, this equivalence
  40. is no longer true because the value of the variable totalmac has
  41. changed. You can work around the problem by making the call to strcpy
  42. as follows:
  43.  
  44.    strcpy(macropointer,line);
  45.  
  46.    Microsoft is researching this problem and will post new information
  47. as it becomes available.
  48.  
  49. Keywords:  buglist5.00 buglist5.10 TAR76363
  50. Updated  88/07/21 03:19
  51.